/**
 * @Classname InsertValueSearch 插值查找：
 * @Description TODO 对有序数组，输入一个数，看是否有这个数字，并输出下标
 * 注：对于数据量大，关键字分布均匀的查找表，插值较快
 * 关键字分布不均匀，就不一定比折半查找好·
 * @Date 2021/11/24 10:12
 * @Created K024851
 */
public class InsertValueSearch {

    public static void main(String[] args) {
        int arr[] = {1, 8, 10, 89, 1111, 1111, 1234};


    }


    public static int insertValueSearch(int[] arr, int left, int right, int findVal) {

        if (left > right || findVal < arr[0] || findVal > arr[arr.length - 1]) {
            return -1;
        }
        int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - findVal);
        int midVal = arr[mid];
        if (findVal > midVal) {
            return insertValueSearch(arr, mid + 1, right, findVal);
        } else if (findVal < midVal) {
            return insertValueSearch(arr, left, mid - 1, findVal);
        } else {
            return mid;
        }

    }

}
